המחלקה למדעי המחשב, אוניברסיטת בן גוריון מבני נתונים, סמסטר אביב 2102 עבודת בית מספר - 2 מעשית נושאים: מערכים, רשימות מרצה ומתרגלים אחראים: איתן בכמט, איסנה וקסלר, רז ניסים תאריך פרסום: 11.21 תאריך הגשה: 11.21 הוראות חשובות לפני שמתחילים: 1. את העבודה יש להגיש בזוגות. לתרגיל מצורפים קבצי,Java אחד מהם מכיל את פונקציית ה- main אותה אנו נריץ במהלך הבדיקה. עליכם להוסיף קוד שלכם בתוך הקבצים האלה. מותר להוסיף קבצי אובייקט נוספים. עליכם להגיש דרך ה- Submission system קובץ ZIP יחיד עם כל הקבצים של העבודה, ששמו הוא ת"ז של המגישים מופרדות במקף תחתי. עליכם להוסיף תיעוד לקוד שלכם. שאלות הקשורות לעבודה ניתן לשאול בפורום או בשעות הקבלה של האחראים על העבודה. קראו היטב את כל העבודה לפני שאתם מתחילים! מותר להניח שהקלט הוא תקין..2.6.7 1
מבוא- מערכת לניהול זיכרון בעבודה זו אתם תממשו מערכת המדמה מערכת לניהול זיכרון. נניח שכל הזיכרון מורכב מ-... 1 בלוקים, הנקראים דפים. דפים אלו נשמרים בזיכרון המשני Memory(.)Physical הזיכרון הראשי RAM( )Main Memory/ לעומת זאת, יכול להכיל רק דפים. הגישה לדפים אשר נמצאים בזיכרון הראשי היא מהירה יותר ולכן כאשר המערכת רוצה לפנות לדף מסוים, על מנת לקרוא ממנו או לכתוב אליו, הדף צריך להיות בזיכרון הראשי. לכן, לפני שניגשים לדף, בודקים אם הוא נמצא בזיכרון הראשי. אם הוא לא נמצא מביאים אותו מהזיכרון המשני לראשי ואז מבצעים את הפעולה. לכל דף בזיכרון יש מפתח ייחודי אינדקס מ-. עד 111. הגישה לדף מתבצעת באמצעות המפתח שלו. מהרגע שבו דף מסוים מועלה לזיכרון הראשי, התוכן שלו משתנה אך ורק בזיכרון הראשי, ורק ברגע שיחליפו אותו, יעודכן התוכן בזיכרון המשני. מרכיבי המערכת: זיכרון משני: מערך A בגודל.. של מחרוזות. כל תא במערך מייצג דף בזיכרון, כאשר הדף שהמפתח שלו i. A[i] שומר את התוכן של זיכרון ראשי: תור אשר שומר את הדפים הנוכחיים בזיכרון הראשי )מימוש התור נתון לשיקולכם(. כל איבר בתור הוא.Page מבנה נתונים אשר מאפשר גישה ישירה )ב- (1)O( לדפים בתור במידה והם נמצאים בו. ניהול התור ואסטרטגיות להחלפות דפים: מכיוון שהזיכרון הראשי מוגבל בכמות הדפים, כאשר דף חדש מובא מהזיכרון המשני לראשי, צריך להחליפו בדף אחר בזיכרון. בעבודה זו נממש שתי אסטרטגיות להחלפות דפים: :)First in First Out( FIFO הדף הותיק ביותר בתור יוצא קודם. :)Least Recently Used ( LRU הדף שזמן הפנייה )קריאה או כתיבה( האחרון אליו הוא הרחוק ביותר מבין כל הדפים הנמצאים בזיכרון, יוצא קודם. אתחול המערכת: יש לאתחל את כל התאים של הזיכרון המשני במחרוזות ריקות. לזיכרון הראשי נעלה את הדפים הראשונים לפי הסדר.)A[0] A[49]( מערכת לניהול זיכרון תומכת בפעולות הבאות:.key מחזירה את התוכן של הדף שהאינדקס שלו Read(key) 1. 1. Write(key,char) מוסיפים לתוכן של הדף שהאינדקס שלו key את האות char )שרשור( שימו לב )0(: בשתי הפעולות הנ"ל המערכת מחפשת קודם כל אם הדף נמצא בזיכרון הראשי. אם כן, היא עובדת עם הדף הנ"ל. אם לא, המערכת יוצרת דף )שמחליף את אחד הדפים הקיימים בזיכרון הראשי( עם התוכן שנמצא בתא ה- key בזיכרון המשני, ואז מבצעת את הפעולה על הדף הזה בזכרון הראשי. שימו לב )2(: פעולת כתיבה מתבצעת אך ורק בזכרון הראשי! כתיבה לזכרון המשני מתבצעת רק כאשר מוציאים דף שכתבו עליו מהזכרון הראשי. לדוגמא לאחר פעולת כתיבת האות a לדף עם 11, key דף 1
זה בזכרון הראשי יכיל את המחרוזת a, בעוד שבזכרון המשני, [55]A יכיל את המחרוזת הריקה. רק כאשר דף אחר יחליף את דף 11 בזכרון הראשי, התו a יתווסף לתא 11 בזכרון המשני. כלל זה מתקיים גם אם בוצעו מספר כתיבות לדף. tostring() מחזירה ייצוג של הזיכרון המשני כמחרוזת )הפונקציה נתונה לכם(. הרצת התוכנית: המחלקה הראשית תקרא Main והיא תכיל את השיטה args).main(string[] הרצת התוכנית תתבצע משורת הפקודה באופן הבא: java Main uselru InputFileName OutputFileName כאשר uselru אסטרטגיית החלפת הדפים. אם ערכו של הפרמטר "1", נשתמש באסטרטגיית "LRU", כל ערך אחר יגרום לשימוש באסטרטגיית "FIFO" InputFileName השם של קובץ הקלט אשר מכיל את הפקודות למערכת. OutputFileName השם של קובץ הפלט אשר יכיל את הפלט של הפקודות הניתנות למערכת. java Main 1 inputfile.txt outputfile.txt דוגמה: קבצי קלט ופלט לדוגמה: מצורפים לעבודה קובץ קלט לדוגמה, אשר מכילים את אוסף הפקודות למערכת ניהול הזיכרון שלכם. בנוסף מצורפים שני קבצי פלט, המכילים את הפלט של המערכת בהתאם לשתי האסטרטגיות השונות בעבודה. עבודה עם קבצים - קריאה וכתיבה: בתוך מחלקה Main ישנם פונקציות אשר קוראות וכותבות לקבצים. מומלץ לעבור על הקוד ולהבין איך הוא עובד. 3
הערות והכוונות אם רוצים לדמות ב- eclipse הרצת תוכנית משורת פקודה שמקבלת פרמטרים ב- main שלה: הריצו את ה- class שמכיל את ה- שגיאה main שלכם ע"י הפעלה של.Run אתם תקבלו הודעה Exception in thread "main" java.lang.arrayindexoutofboundsexception: 0 at Main.main(Main.java:13) עכשיו היכנסו ל- Run->Run Configurations בחרו בתפריט בצד שמאל Java Application Main 2. היכנסו ל- Arguments וכתבו את הארגומנטים אשר התוכנית שלכם מקבלת כלקט. 2
1